package com.yunquan.ohana.utils

import android.content.ContentValues
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.MediaStore

object CameraUtils {
    /**
     * 调用系统相机拍照
     */
    fun takePhoto(context: Context): Pair<Uri?, Intent?> {
        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        val photoUri = createImageUri(context) ?: return Pair(null, null)
        if (intent.resolveActivity(context.packageManager) != null) {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
        }
        return Pair(photoUri, intent)
    }

    /**
     * 调用系统相机录像
     */
    fun recordVideo(context: Context): Pair<Uri?, Intent?> {
        val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)

        // 设置视频输出路径
        val videoUri = createVideoUri(context) ?: return Pair(null, null)
        intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri)

        // 设置视频质量 (0 = 低质量, 1 = 高质量)
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1)

        // 设置最大录制时长 (单位: 秒)
        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60)

        // 设置最大文件大小 (单位: 字节)
        intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 500 * 1024 * 1024L)

        return Pair(videoUri, intent)
    }

    /**
     * 创建图片文件 Uri
     */
    private fun createImageUri(context: Context): Uri? {
        val contentValues = ContentValues().apply {
            put(MediaStore.Images.Media.DISPLAY_NAME, "IMG_${System.currentTimeMillis()}.jpg")
            put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
        }
        return context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
    }

    /**
     * 创建视频文件 Uri
     */
    private fun createVideoUri(context: Context): Uri? {
        val contentValues = ContentValues().apply {
            put(MediaStore.Video.Media.DISPLAY_NAME, "VID_${System.currentTimeMillis()}.mp4")
            put(MediaStore.Video.Media.MIME_TYPE, "video/mp4")
            put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/MyVideos")
        }
        return context.contentResolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, contentValues)
    }
}